/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package admin.matrices;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import clases.Matriz;
import DBMS.DataBaseManager;
import admin.permisos.PermisosManager;
import clases.*;
import java.util.ArrayList;

/**
 *
 * @author andreth
 */
public class AgregarDescripcion extends DispatchAction {

    /*
     * forward name="success" path=""
     */
    private static final String SUCCESS = "success";
    private static final String SINCOLUMNAS = "SINCOLUMNAS";
    private static final String SINFILAS = "SINFILAS";
    private static final String FAILURE = "failure";
    private static final String name = "Agregar Metriz";

    public ActionForward save(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //Matriz a la que se agregara la descripcion
        //Si la matriz no existe, no se le puede agregar descripcion

        DataBaseManager dbms = DataBaseManager.getInstance();
        Matriz m = (Matriz) form;
        int numFilas= 0;
        int numColumnas=0;
        System.out.println("Numero de Filas  " + m.getNumeroFilas() + "  Numero Columnas " + m.getNumeroColumnas());
        if (m.getNumeroFilas() != null && m.getNumeroColumnas() != null) {
            numFilas= m.getNumeroFilas();
            numColumnas= m.getNumeroColumnas();
        }
        if (m == null) {
            m.setMensaje("Descripcion no agregada a la matriz");
            System.out.println("No se pudo agregar la Descripcion a la Matriz");
            return mapping.findForward(FAILURE);
        }
        /*
         * Se llama al metodo agregarDescripcionMatriz, donde se agrega la
         * descripcion al objeto matrizADescribir
         */

        System.out.println("Agregando columnas a la matriz" + m.getIdMatriz());

        for (int i = 0; i < m.getColumnas().size(); i++) {
            Columna c = m.getColumnas().get(i);
            //Calculo tamano de la palabara  mas larga
            //  int tamMax =m.calcularPalabraMasLarga(c.getNombre());
            // m.setTamanoCeldas(tamMax, i);
            //     System.out.println("nombre columna y max: "+c.getNombre()+" "+tamMax);
            System.out.println("COLUMNA" + c.getCpyd() + "  " + c.getTipo());
            if ("Lista".equals(c.getTipo())) {
                System.out.println("El tipo de la columna es lista");
                ArrayList<Lista> listas = dbms.consultarListas();

                for (Lista lista : listas) {
                    if (lista.getIdLista() == (c.getIdLista())) {
                        c.setLista(lista);
                    }
                }
                System.out.println("\t  GUARDO LA LISTA" + c.getLista().getNombre());
                request.setAttribute(c.getLista().getNombre(), c.getLista().getValores());
                //Guardo todas las listas por su nombre
            }

        }

        if (m.getCategorias() == null || m.getCategorias().isEmpty()) {
            System.out.println("NO HAY CATEGORIAS");
            Unidad u = new Unidad();
            u.setCodigo(m.getCodigoUnidad());
            ArrayList<Categoria> categorias = DataBaseManager.getInstance().consultarCategorias(u);
            m.setCategorias(categorias);

        }

        System.out.println(m.getFechacreacion() + "++" + m.getNombre() + "++" + m.getCodigoUnidad() + "++" + m.getIdMatriz());
        if (dbms.agregarDescripcionMatriz(m)) {
            m.setMensajeOK("Descripcion agregada");
            request.setAttribute("listas", dbms.consultarListas());
            System.out.println("Descripcion agregada a matriz");
            //   m.setColumnas(dbms.consultarColumnas(m));
            request.setAttribute("Matriz", m);
            request.getSession().setAttribute("Matriz", m);
            ArrayList<Columna> arrCol = dbms.consultarColumnas(m);
            ArrayList<Celda> filas = new ArrayList<Celda>();

            int celdas = numFilas * numColumnas;
            for (int i = 0; i < celdas; i++) {
                Celda cel = new Celda();
                cel.setNombre("");
                cel.setIdColumna(arrCol.get(i % m.getNumeroColumnas()).getIdColumna());
                filas.add(cel);

            }

            m.setFilas(filas);
            DataBaseManager.getInstance().agregarFilas(m);


            request.getSession().setAttribute("columnas", m.getColumnas());
            System.out.println("tam " + m.getColumnas().size());
            return mapping.findForward(SINFILAS);
        } else {
            m.setMensaje("Descripcion no agregada a la Matriz");
            System.out.println("No se pudo agregar la matriz");
            return mapping.findForward(FAILURE);
        }
    }

    public ActionForward populate(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
//        Usuario usr = (Usuario) request.getSession().getAttribute("logueado");
//        DataBaseManager dbms = DataBaseManager.getInstance();
//        if (!PermisosManager.validar(this.name, dbms.consultarPermisoAccion(name), usr.getPermiso())) {
//            System.out.println("No tiene permiso");
//            return mapping.findForward(FAILURE);
//        }
        DataBaseManager dbms = DataBaseManager.getInstance();
        System.out.println("enlazando a agregarDescripcion");
        request.removeAttribute("Lista");
        ArrayList<Unidad> unidades = DataBaseManager.getInstance().getUnidades();
        request.setAttribute("unidades", unidades);
        return mapping.findForward("page");
    }

    public ActionForward init(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
//        Usuario usr = (Usuario) request.getSession().getAttribute("logueado");
//        DataBaseManager dbms = DataBaseManager.getInstance();
//        if (!PermisosManager.validar(this.name, dbms.consultarPermisoAccion(name), usr.getPermiso())) {
//            System.out.println("No tiene permiso");
//            return mapping.findForward(FAILURE);
//        }
        DataBaseManager dbms = DataBaseManager.getInstance();
        Matriz m = (Matriz) form;
        System.out.println("guardando matriz sin columnas" + m.getNombre() + m.getCodigoUnidad());
        boolean sinColumnasAgregada = dbms.agregarMatrizUnidad(m);
        if (sinColumnasAgregada) {
            m.setMensajeOK("Registro de matriz agregado");
            Unidad u = new Unidad();
            u.setCodigo(m.getCodigoUnidad());
            request.setAttribute("categorias", m.getCategorias());
            System.out.println("ID DE LA MATRIZ" + m.getIdMatriz() + "Cantidad de categorias" + m.getCategorias().size());
            request.setAttribute("listas", dbms.consultarListas());
            request.getSession().setAttribute("tipos", Columna.tipos);
            return mapping.findForward(SINCOLUMNAS);
        }
        m.setMensaje("Registro de matriz no agregado. Intente un nombre diferente");
        return mapping.findForward(FAILURE);
    }
}
